cutCreateTimer not multi-thread safe Is there a way to submit bugs?

I’m running a modified version of the CUDA SDK’s BandwidthTest program, basically I’m having 1 thread per device - I like to live dangerously (who said engineering wasn’t exciting? Multi-thread development is an extreme sport). I have 2 devices in all.

cutCreateTimer gets called when a thread wakes up. If the threads are woken up separately, it’s all OK, but if the threads are woken simultaneously I get an ‘invalid NULL pointer’ error.

Is there a formal way to submit bugs to nVidia? I know that this timing function isn’t a ‘core’ function, more like something supplied on the side to help develop functions so this likely isn’t a priority for them, but it’d be nice if there was a way to submit bugs anyway.

For those who like pain, I copy-pasted the stack below:

msvcp80d.dll!std::_Debug_message(const wchar_t * message=0x00455220, const wchar_t * file=0x004552d8, unsigned int line=145) Line 24 C++
TestCUDA.exe!std::_Debug_pointer<StopWatchBase *>(StopWatchBase * * _First=0x00000000, const wchar_t * _File=0x004552d8, unsigned int _Line=145) Line 1379 + 0x15 bytes C++
TestCUDA.exe!std::_Debug_range2<StopWatchBase * *>(StopWatchBase * * _First=0x0037b198, StopWatchBase * * _Last=0x00000000, const wchar_t * _File=0x004552d8, unsigned int _Line=145, std::random_access_iterator_tag __formal={…}) Line 1397 + 0x11 bytes C++
TestCUDA.exe!std::_Debug_range<StopWatchBase * *>(StopWatchBase * * _First=0x0037b198, StopWatchBase * * _Last=0x00000000, const wchar_t * _File=0x004552d8, unsigned int _Line=145) Line 1406 + 0x2b bytes C++
TestCUDA.exe!std::_Uninit_copy<StopWatchBase * *,StopWatchBase * *,std::allocator<StopWatchBase *> >(StopWatchBase * * _First=0x0037b198, StopWatchBase * * _Last=0x00000000, StopWatchBase * * _Dest=0x0037b1d8, std::allocator<StopWatchBase *> & __formal={…}, std::allocator<StopWatchBase *> & __formal={…}, std::allocator<StopWatchBase *> & __formal={…}) Line 145 + 0x17 bytes C++
TestCUDA.exe!stdext::unchecked_uninitialized_copy<StopWatchBase * *,StopWatchBase * *,std::allocator<StopWatchBase *> >(StopWatchBase * * _First=0x0037b198, StopWatchBase * * _Last=0x00000000, StopWatchBase * * _Dest=0x0037b1d8, std::allocator<StopWatchBase *> & _Al={…}) Line 805 + 0x53 bytes C++
TestCUDA.exe!std::_Uninit_move<StopWatchBase * *,StopWatchBase * *,std::allocator<StopWatchBase *>,std::_Undefined_move_tag>(StopWatchBase * * _First=0x0037b198, StopWatchBase * * _Last=0x00000000, StopWatchBase * * _Dest=0x0037b1d8, std::allocator<StopWatchBase *> & _Al={…}, std::_Undefined_move_tag __formal={…}, std::_Undefined_move_tag __formal={…}) Line 206 + 0x15 bytes C++
TestCUDA.exe!stdext::_Unchecked_uninitialized_move<StopWatchBase * *,StopWatchBase * *,std::allocator<StopWatchBase *> >(StopWatchBase * * _First=0x0037b198, StopWatchBase * * _Last=0x00000000, StopWatchBase * * _Dest=0x0037b1d8, std::allocator<StopWatchBase *> & _Al={…}) Line 845 + 0x4f bytes C++
TestCUDA.exe!std::vector<StopWatchBase *,std::allocator<StopWatchBase *> >::_Umove<StopWatchBase * *>(StopWatchBase * * _First=0x0037b198, StopWatchBase * * _Last=0x00000000, StopWatchBase * * _Ptr=0x0037b1d8) Line 1112 + 0x18 bytes C++
TestCUDA.exe!std::vector<StopWatchBase *,std::allocator<StopWatchBase *> >::_Insert_n(std::_Vector_iterator<StopWatchBase *,std::allocator<StopWatchBase *> > _Where=…, unsigned int _Count=1, StopWatchBase * const & _Val=0x0037b138) Line 1143 + 0x17 bytes C++
TestCUDA.exe!std::vector<StopWatchBase *,std::allocator<StopWatchBase *> >::insert(std::_Vector_iterator<StopWatchBase *,std::allocator<StopWatchBase *> > _Where=…, StopWatchBase * const & _Val=0x0037b138) Line 855 C++
TestCUDA.exe!std::vector<StopWatchBase *,std::allocator<StopWatchBase *> >::push_back(StopWatchBase * const & _Val=0x0037b138) Line 800 + 0x2d bytes C++
TestCUDA.exe!StopWatch::create() Line 102 C++
TestCUDA.exe!cutCreateTimer(unsigned int * name=0x0111fd78) Line 1331 + 0x5 bytes C++

simply reply this post to top to catch the eyes of our nv guys :)

You mean, just like that? :biggrin: