Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
svenwoop committed Jan 22, 2014
2 parents 1b85717 + 0d2fb8d commit 1fe8c45
Show file tree
Hide file tree
Showing 14 changed files with 691 additions and 32 deletions.
2 changes: 1 addition & 1 deletion common/cmake/icc_xeonphi.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@ SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g -O3 -DNDEBUG -mCG_lrb_num_threads=4 -mCG

SET(CMAKE_LINKER icpc)
SET(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_CXX_COMPILER> -mmic -static-intel -rdynamic -fPIC -L${CMAKE_BINARY_DIR} <LINK_FLAGS> -o <TARGET> ${CMAKE_GNULD_IMAGE_VERSION} <OBJECTS> <LINK_LIBRARIES>")
SET(CMAKE_CXX_CREATE_SHARED_LIBRARY "<CMAKE_CXX_COMPILER> -mmic -static-intel <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_MODULE_CXX_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS> -o <TARGET> ${CMAKE_GNULD_IMAGE_VERSION} <OBJECTS> <LINK_LIBRARIES> -zmuldefs")
SET(CMAKE_CXX_CREATE_SHARED_LIBRARY "<CMAKE_CXX_COMPILER> -mmic -static-intel <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_MODULE_CXX_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS> -o <TARGET> ${CMAKE_GNULD_IMAGE_VERSION} <OBJECTS> <LINK_LIBRARIES> -zmuldefs")
6 changes: 5 additions & 1 deletion common/cmake/ispc.props
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,11 @@
<MathLibrary>0</MathLibrary>
<Opt>1</Opt>
<CommandLineTemplate>ispc.exe [AllOptions] [AdditionalOptions] [Inputs]</CommandLineTemplate>
<Outputs>$(IntDir)%(Filename).ispc*.obj</Outputs>
<Outputs Condition="'$(Configuration)'=='Debug' and '$(MSBuildProjectName)'!='embree'">$(IntDir)%(Filename).ispc.obj;$(IntDir)%(Filename).ispc_sse2.obj;$(IntDir)%(Filename).ispc_sse4.obj</Outputs>
<Outputs Condition="'$(Configuration)'=='Release' and '$(MSBuildProjectName)'!='embree'">$(IntDir)%(Filename).ispc.obj;$(IntDir)%(Filename).ispc_sse2.obj;$(IntDir)%(Filename).ispc_sse4.obj</Outputs>
<Outputs Condition="'$(Configuration)'=='ReleaseAVX' and '$(MSBuildProjectName)'!='embree'">$(IntDir)%(Filename).ispc.obj;$(IntDir)%(Filename).ispc_sse2.obj;$(IntDir)%(Filename).ispc_sse4.obj;$(IntDir)%(Filename).ispc_avx.obj</Outputs>
<Outputs Condition="'$(Configuration)'=='ReleaseAVX2' and '$(MSBuildProjectName)'!='embree'">$(IntDir)%(Filename).ispc.obj;$(IntDir)%(Filename).ispc_sse2.obj;$(IntDir)%(Filename).ispc_sse4.obj;$(IntDir)%(Filename).ispc_avx.obj</Outputs>
<Outputs Condition="'$(MSBuildProjectName)'=='embree'">$(IntDir)%(Filename).ispc.obj;$(IntDir)%(Filename).ispc_sse2.obj;$(IntDir)%(Filename).ispc_sse4.obj;$(IntDir)%(Filename).ispc_avx.obj;$(IntDir)%(Filename).ispc_avx2.obj</Outputs>
<ExecutionDescription>Compiling %(Filename)%(Extension) ...</ExecutionDescription>
</ISPC>
</ItemDefinitionGroup>
Expand Down
2 changes: 1 addition & 1 deletion common/sys/sync/mutex.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ namespace embree
_mm_pause();
_mm_pause();
#else
_mm_delay_32(128); // FIXME: exp falloff
_mm_delay_32(256); // FIXME: exp falloff
#endif
}
__memory_barrier();
Expand Down
10 changes: 4 additions & 6 deletions kernels/common/scene.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ namespace embree
numTriangleMeshes(0), numTriangleMeshes2(0), numUserGeometries(0),
flat_triangle_source_1(this,1), flat_triangle_source_2(this,2)
{
geometries.reserve(128);

#if defined(__MIC__)

accels.accel0 = NULL;
Expand Down Expand Up @@ -209,9 +211,8 @@ namespace embree

unsigned Scene::add(Geometry* geometry)
{
#if !defined(__MIC__)
Lock<AtomicMutex> lock(geometriesMutex);
#endif

if (usedIDs.size()) {
int id = usedIDs.back();
usedIDs.pop_back();
Expand All @@ -225,9 +226,8 @@ namespace embree

void Scene::remove(Geometry* geometry)
{
#if !defined(__MIC__)
Lock<AtomicMutex> lock(geometriesMutex);
#endif

usedIDs.push_back(geometry->id);
geometries[geometry->id] = NULL;
delete geometry;
Expand All @@ -243,9 +243,7 @@ namespace embree

void Scene::build ()
{
#if !defined(__MIC__)
Lock<MutexSys> lock(mutex);
#endif

if ((isStatic() && isBuild()) || !ready()) {
recordError(RTC_INVALID_OPERATION);
Expand Down
11 changes: 4 additions & 7 deletions kernels/common/scene.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,13 +81,10 @@ namespace embree
__forceinline const Geometry* get(size_t i) const { assert(i < geometries.size()); return geometries[i]; }
__forceinline Geometry* get_locked(size_t i) {

#if !defined(__MIC__)
Lock<AtomicMutex> lock(geometriesMutex);
#endif

Lock<AtomicMutex> lock(geometriesMutex);
Geometry *g = geometries[i];

assert(i < geometries.size()); return g;
assert(i < geometries.size());
return g;
}

/* get triangle mesh by ID */
Expand Down Expand Up @@ -209,7 +206,6 @@ namespace embree


public:
AtomicMutex geometriesMutex;
std::vector<int> usedIDs;
std::vector<Geometry*> geometries; //!< list of all user geometries

Expand All @@ -222,6 +218,7 @@ namespace embree
bool needVertices;
bool is_build;
MutexSys mutex;
AtomicMutex geometriesMutex;

public:
atomic_t numTriangleMeshes; //!< number of enabled triangle meshes
Expand Down
2 changes: 2 additions & 0 deletions kernels/xeon/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ IF (TARGET_AVX)
bvh4i/bvh4i_intersector1.cpp
bvh4i/bvh4i_intersector4_chunk.cpp
bvh4i/bvh4i_intersector8_chunk.cpp
bvh4i/bvh4i_intersector8_hybrid.cpp

bvh4i/bvh4i_builder_fast.cpp
bvh4i/bvh4i_builder_binner.cpp
Expand Down Expand Up @@ -154,6 +155,7 @@ IF (TARGET_AVX2)
bvh4/bvh4_intersector8_chunk.cpp
bvh4/bvh4_intersector8_hybrid.cpp
bvh4i/bvh4i_intersector8_chunk_avx2.cpp
bvh4i/bvh4i_intersector8_hybrid.cpp

bvh4i/bvh4i_intersector1.cpp
bvh4i/bvh4i_intersector4_chunk.cpp
Expand Down
6 changes: 3 additions & 3 deletions kernels/xeon/bvh4/bvh4.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ namespace embree
BVH4* accel = new BVH4(SceneTriangle4::type);

Accel::Intersectors intersectors;
if (g_traverser == "default") intersectors = BVH4Triangle4IntersectorsChunk(accel);
if (g_traverser == "default") intersectors = BVH4Triangle4IntersectorsHybrid(accel);
else if (g_traverser == "chunk" ) intersectors = BVH4Triangle4IntersectorsChunk(accel);
else if (g_traverser == "hybrid" ) intersectors = BVH4Triangle4IntersectorsHybrid(accel);
else throw std::runtime_error("unknown traverser "+g_traverser+" for BVH4<Triangle4>");
Expand All @@ -278,7 +278,7 @@ namespace embree
BVH4* accel = new BVH4(SceneTriangle8::type);

Accel::Intersectors intersectors;
if (g_traverser == "default") intersectors = BVH4Triangle8IntersectorsChunk(accel);
if (g_traverser == "default") intersectors = BVH4Triangle8IntersectorsHybrid(accel);
else if (g_traverser == "chunk" ) intersectors = BVH4Triangle8IntersectorsChunk(accel);
else if (g_traverser == "hybrid" ) intersectors = BVH4Triangle8IntersectorsHybrid(accel);
else throw std::runtime_error("unknown traverser "+g_traverser+" for BVH4<Triangle8>");
Expand Down Expand Up @@ -314,7 +314,7 @@ namespace embree
BVH4* accel = new BVH4(SceneTriangle4v::type);

Accel::Intersectors intersectors;
if (g_traverser == "default") intersectors = BVH4Triangle4vIntersectorsChunk(accel);
if (g_traverser == "default") intersectors = BVH4Triangle4vIntersectorsHybrid(accel);
else if (g_traverser == "chunk" ) intersectors = BVH4Triangle4vIntersectorsChunk(accel);
else if (g_traverser == "hybrid" ) intersectors = BVH4Triangle4vIntersectorsHybrid(accel);
else throw std::runtime_error("unknown traverser "+g_traverser+" for BVH4<Triangle4>");
Expand Down
2 changes: 1 addition & 1 deletion kernels/xeon/bvh4/bvh4_intersector8_hybrid.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#include "geometry/triangle8_intersector8_moeller.h"
#include "geometry/triangle4v_intersector8_pluecker.h"

#define SWITCH_THRESHOLD 3
#define SWITCH_THRESHOLD 6

namespace embree
{
Expand Down
9 changes: 8 additions & 1 deletion kernels/xeon/bvh4i/bvh4i.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ namespace embree
DECLARE_SYMBOL(Accel::Intersector8,BVH4iTriangle1vIntersector8ChunkPluecker);
DECLARE_SYMBOL(Accel::Intersector8,BVH4iTriangle4vIntersector8ChunkPluecker);
DECLARE_SYMBOL(Accel::Intersector8,BVH4iVirtualIntersector8Chunk);

DECLARE_SYMBOL(Accel::Intersector8,BVH4iTriangle4Intersector8HybridMoeller);


#if defined(__TARGET_AVX2__)
extern Accel::Intersector8 BVH4iTriangle1Intersector8ChunkAVX2;
#endif
Expand Down Expand Up @@ -90,6 +94,8 @@ namespace embree
SELECT_SYMBOL_AVX_AVX2(features,BVH4iTriangle1vIntersector8ChunkPluecker);
SELECT_SYMBOL_AVX_AVX2(features,BVH4iTriangle4vIntersector8ChunkPluecker);
SELECT_SYMBOL_AVX_AVX2(features,BVH4iVirtualIntersector8Chunk);

SELECT_SYMBOL_AVX_AVX2(features,BVH4iTriangle4Intersector8HybridMoeller);
}

Accel::Intersectors BVH4iTriangle1Intersectors(BVH4i* bvh)
Expand All @@ -109,7 +115,8 @@ namespace embree
intersectors.ptr = bvh;
intersectors.intersector1 = BVH4iTriangle4Intersector1Moeller;
intersectors.intersector4 = BVH4iTriangle4Intersector4ChunkMoeller;
intersectors.intersector8 = BVH4iTriangle4Intersector8ChunkMoeller;
//intersectors.intersector8 = BVH4iTriangle4Intersector8ChunkMoeller;
intersectors.intersector8 = BVH4iTriangle4Intersector8HybridMoeller;
intersectors.intersector16 = NULL;
return intersectors;
}
Expand Down
8 changes: 2 additions & 6 deletions kernels/xeon/bvh4i/bvh4i_builder_morton.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,7 @@

#define BVH_NODE_PREALLOC_FACTOR 1.1f

//#define PROFILE

#if defined(__USE_STAT_COUNTERS__)
#define PROFILE
#endif

#define DBG(x)

Expand Down Expand Up @@ -61,14 +57,14 @@ namespace embree
double dt_min = pos_inf;
double dt_avg = 0.0f;
double dt_max = neg_inf;
for (size_t i=0; i<200; i++)
for (size_t i=0; i<20; i++)
{
TaskScheduler::executeTask(threadIndex,threadCount,_build_parallel_morton,this,TaskScheduler::getNumThreads(),"build_parallel_morton");
dt_min = min(dt_min,dt);
dt_avg = dt_avg + dt;
dt_max = max(dt_max,dt);
}
dt_avg /= double(200);
dt_avg /= double(20);

std::cout << "[DONE]" << std::endl;
std::cout << " min = " << 1000.0f*dt_min << "ms (" << source->size()/dt_min*1E-6 << " Mtris/s)" << std::endl;
Expand Down
Loading

0 comments on commit 1fe8c45

Please sign in to comment.