为了在PowerPC上寻找一个好的内存策略,我写了几个复制函数.使用具有高速缓存提示(dcb*)的Altivec或fp寄存器可以使大数据的简单字节复制循环的性能提高一倍.最初很满意的是,我定期记忆,看看它的比较...比我最好的速度快10倍!我无意重写memcpy,但我希望从中学习并加速几个简单的图像过滤器,这些过滤器花费大部分时间将像素移入和移出内存.
Shark分析显示它们的内部循环使用dcbt预取,有4个向量读取,然后是4个向量写入.在调整了我的最佳函数以便每次迭代运行64个字节之后,memcpy的性能优势仍然令人尴尬.我正在使用dcbz来释放带宽,Apple没有使用任何东西,但两个代码都倾向于对商店犹豫不决.
prefetch dcbt future dcbt distant future load stuff lvx image lvx image + 16 lvx image + 32 lvx image + 48 image += 64 prepare to store dcbz filtered dcbz filtered + 32 store stuff stvxl filtered stvxl filtered + 16 stvxl filtered + 32 stvxl filtered + 48 filtered += 64 repeat
有没有人对为什么非常相似的代码有如此戏剧性的性能差距有一些想法?我喜欢用真正的图像过滤器来腌制真正的图像过滤器!
附加信息:所有数据都是矢量对齐的.我正在制作图像的过滤副本,而不是替换原始图像.该代码在PowerPC G4,G5和Cell PPU上运行.Cell SPU版本已经非常快.
是否有任何工具可以在Mac OS X Lion和iOS上分析缓存未命中.如果您知道如何在乐器中这样做,请帮助.
Shark(CHUD包)不能安装在Mac OS X Lion和更高版本上,所以我不能使用鲨鱼.同时我在Instruments中找不到缓存未命中分析器的功能.
我想在OS 10.5上使用Shark对我的iPhone游戏进行一些基本的分析(Open GL ES + Objective C).我怎么能这样做?我已经阅读过教程,但是经过一整天的工作编码和之后几个小时的iPhone开发,它们对我来说太冗长了.
我以前在Mac应用程序中使用过shark.我现在正试图为iPhone设置它,但它不想工作.
我已经从另一篇文章中了解了这些说明:构建应用程序并在设备上启动
- Launch Shark
- From the Shark menu, select Sampling->Network/iPhone Profiling
- In the Shark window, select the radio button "Control network profiling of shared computers".
- Select your iPhone in the list and optionally configure the profiling session
- Press Start to begin profiling, and Stop to end
Run Code Online (Sandbox Code Playgroud)
除了最后一步,一切都很好.我按开始并没有任何反应......这真的令人沮丧,因为开始按钮不是灰色的,鲨鱼只是默默地失败而没有任何进一步的消息.
我试过:
- Reboot
- Re-install latest XCode
- Restore my ipod
- Try different USB port
- Disabling firewall
Run Code Online (Sandbox Code Playgroud)
有人有其他建议或过去见过吗?
我的标准Linux分析应用程序方式是:
1) compile with g++ -pg
2) run prog
3) gprof
Run Code Online (Sandbox Code Playgroud)
显然gprof在MacOSX 10.5上很流行,我应该使用Shark.我发现aby Shark的所有教程都涉及XCode(而我的构建是用Makefiels和g ++完成的).
有人可以发布在使用g ++构建的应用程序上使用shark的分步说明吗?说出类似的话:
int main() { while(1); }
g++ blah.cpp -o blah; do I need to give it more command line arguments?
how do I use shark here?
Run Code Online (Sandbox Code Playgroud) 对于一些循环优化问题的解释,Google并没有向我提出大神.所以,在悲伤中我没有Google-fu,我转向你StackOverflow.
我正在优化一个C程序来解决一个特定的微分方程系统.在找到数值解的过程中,我称之为一个函数,它建立一个线性方程组,然后是一个解决它的函数.
解决方案函数最初在访问定义线性系统的阵列对角线上的元素时存在瓶颈.所以我包含了一个在系统初始化期间设置的一维数组,它保存了数组对角线的值.
为了好玩,我继续使用初始化对角元素的代码,测量所花费的时间并尝试不断改进代码.我试过的版本引出了一些问题:
注意:我将我尝试过的所有版本放入一个函数中,并对此函数进行了分析,以查看花费的时间.我将报告一个版本的执行时间占功能总时间的百分比.该功能评估了数百万次.数字越小越好.
代码中使用的相关数据声明:
/* quick definitions of the relevant variables, data is a struct */
static const int sp_diag_ind[98] = {2,12,23,76,120,129,137,142,.../* long list */};
double *spJ = &(data->spJ[0]);
/* data has double spJ[908] that represents a sparse matrix stored in triplet
* form, I grab the pointer because I've found it to be more
* efficient than referencing data->spJ[x] each time I need it
*/
int iter,jter;
double *diag_data = NV_DATA_S(data->J_diag);
/* data->J_diag has a content …Run Code Online (Sandbox Code Playgroud) 我是Shark的新手,我想知道是否可以将时间样本缩小到一个特定的方法?
假设我只是为了它而知道在调用所有NSArray(或子类)实例的方法'count'时使用了多少资源.
这可能是一个相当愚蠢的问题,但我一直在寻找Apple开发者页面,我还没有找到任何下载链接到鲨鱼.我在我的硬盘上搜索过,我只找到了鲨鱼插件......
我把它设置为iPhone /网络模式,但设备永远不会出现在任何地方.通过xcode连接并运行应用程序.你知道一个有用的教程吗?