⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memset.optimize.c

📁 代码优化,有效使用内存,透视优化技术,对比优化方法,如果你在追求代码效率的最大化,该资源你不能不读.
💻 C
字号:
/*
	The example demonstrating the technique of optimizing memory filling
	by means of write-through into the system memory bypassing the cache
*/


#include <DoCPU.h>
#include <DoCPU.cmd.h>



#define _MEM_SET	0
#define _PAGE_SIZE 4*K

#define BLOCK_SIZE (8*M)

/* -------------------------------------------------------------------

						NON-OPTIMIZED VERSION 

--------------------------------------------------------------------- */
normal(char *p)
{
 	memset(p,0x666,BLOCK_SIZE);
	A_READ(p,BLOCK_SIZE);
}



	/* ----------------------------------------------------------------------

				OPTIMIZED VERSION
							(using non-cached write instruction)

	----------------------------------------------------------------------- */
nonstore(char *p, char *val)
{
	int a;
	for (a = 0; a < BLOCK_SIZE; a += 16)
	{
		__stream_cpy(p, val);
		p += 16;
	}
	A_READ(p-BLOCK_SIZE,BLOCK_SIZE);
}


	/* ----------------------------------------------------------------------

				PESSIMIZED VERSION
							(using MMX write instruction)

	----------------------------------------------------------------------- */
mmx_store(char *p, char *val)
{
	int a;
	for (a = 0; a < BLOCK_SIZE; a += 8)
	{
		__mmx_cpy(p, val);
		p += 8;
	}
	A_READ(p-BLOCK_SIZE,BLOCK_SIZE);
}


main()
{
	int a,b,d;		
	char *z;
	char *p;
						
	// allocating memory
	p=(char *)_malloc32(BLOCK_SIZE*A_NITER);

  	z = (char *) _malloc32(sizeof(int));


	// Initializing the variable

	printf("\n_____Memset Optimization Using Movaps_____\n");
	PRINT_TITLE;

	A_BEGIN(0)
		normal(p);
	A_END(0)

	A_BEGIN(1)
		nonstore(p, z);
	A_END(1)


   	A_BEGIN(2)
   		mmx_store(p, z);
	A_END(2)

	RM;
	Ax_OUT("OPTIMIZED ", 0, 1);	
	Ax_OUT("PESSIZIZED", 0, 2);	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -